﻿Imports System.IO
Public Class GestionProducto
    Private listaProductos As New List(Of Producto)
    Public ReadOnly Property Productos As ObjectModel.ReadOnlyCollection(Of Producto)
        Get
            Return listaProductos.AsReadOnly
        End Get
    End Property
    Public Sub New()
        If Not Directory.Exists("Fichero") Then
            Directory.CreateDirectory("Fichero")

        End If
        If Not File.Exists("Fichero\Productos.txt") Then
            ProductosIniciales()
        Else
            Dim fich As StreamReader = Nothing
            Try
                fich = New StreamReader("Fichero\Productos.txt")
                If fich.EndOfStream Then 'El fichero estaba vacío
                    ProductosIniciales()
                Else
                    Do Until fich.EndOfStream
                        Dim datos() As String
                        Dim linea As String = fich.ReadLine

                        datos = linea.Split("*")
                        listaProductos.Add(New Producto(datos(0), datos(1), datos(2)))

                    Loop
                    fich.Close()
                End If
            Catch ex As Exception
                fich.Close()
            End Try
        End If
    End Sub


    Public Function Añadir(ByVal prod As Producto) As String
        ' Añade un nuevo producto a los existentes controlando que no existiera previamente. Si lo hace se quedará grabado en el fichero
        If prod Is Nothing OrElse prod.Nombre = "" OrElse prod.Precio <= 0 Then
            Return "Error tiene que tener nombre y precio mayor que"
        End If
        If listaProductos.Contains(prod) Then

            Return "Ya existe"

        End If
        listaProductos.Add(prod)
        Grabar()
        Return ""
    End Function

    Public Function Borrar(ByVal nombre As String) As String
        ' Borra el producto que se corresponda con ese nombre, siempre que exista. Si lo consigue deberemos hacer que ya no esté en el fichero
        Dim pr As New Producto(nombre, 0, "")
        If Not listaProductos.Contains(pr) Then Return "No existe"
        listaProductos.Remove(pr)
        Grabar()
        Return ""

    End Function

    Private Function Grabar() As String

        Dim fic As StreamWriter = Nothing
        Try
            fic = New StreamWriter("Fichero\Productos.txt")
            For i = 0 To listaProductos.Count - 1
                fic.WriteLine(listaProductos(i).Nombre & "*" & listaProductos(i).Precio & "*" & listaProductos(i).Descripcion)

            Next
        Catch ex As Exception
            fic.Close()
            Return ex.Message
        End Try

        fic.Close()
        Return ""
        ' Es privada, porque grabo al Añadir y al Borrar desde aquí. El/la usuaria de la clase no necesita saberlo
    End Function

    Private Sub ProductosIniciales()
        listaProductos.Add(New Producto("Macarrones", 12.32, "Gratinados con queso cammembert"))
        Grabar()
    End Sub

End Class
